from database import SessionLocal
from fastapi import Depends, HTTPException, APIRouter
from sqlalchemy.orm import Session
import statistics.crud

sta_api = APIRouter()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

# 查询所有超过30岁的学员的信息
@sta_api.get("/statistics/stu_info_age",summary="查询所有超过30岁的学员的信息")
async def get_stu_info_by_age(age:int,db: Session = Depends(get_db)):
   return statistics.crud.get_stu_info_by_age(db=db,age=age)

# 统计每个班级男生女生的人数
@sta_api.get("/statistics/count_gender",summary="统计每个班级男生女生的人数")
async def get_count_gender(cid:str,db: Session = Depends(get_db)):
    return statistics.crud.get_count_gender(db=db,cid=cid)

# 查询每次考试成绩都在80分以上的学生的编号，姓名和成绩
@sta_api.get("/statistics/stu_score",summary="询每次考试成绩都在80分以上的学生的编号，姓名和成绩")
async def get_stu_score(sc:int,db: Session = Depends(get_db)):
    return statistics.crud.get_sinfo_by_grade(db=db,sc=sc)

# 查询有两次以上不及格的学生的姓名，班级和不及格成绩
@sta_api.post("/statistics/grade_fail",summary="查询有两次以上不及格的学生的姓名，班级和不及格成绩")
async def get_grade_fail(ct:int,db: Session = Depends(get_db)):
    return statistics.crud.grade_2fail_info(db=db,ct=ct)

# 统计每次考试每个班级的平均分，按照从高到低排序
@sta_api.post("/statistics/grade_avg_by_class",summary="统计每次考试每个班级的平均分，按照从高到低排序")
async def grade_avg_by_class(db: Session = Depends(get_db)):
    return statistics.crud.statistic_avg_grade_by_class(db=db)

# 统计就业薪资最高的前五名学生的姓名，班级和就业时间，就业公司
@sta_api.post("/statistics/stu_5limit_sal",summary="统计就业薪资最高的前五名学生的姓名，班级和就业时间，就业公司")
async def stu_5limit_grade(db: Session = Depends(get_db)):
    return statistics.crud.statistic_stu_by_sal(db=db)

# 统计每个学生的就业时长（offer下发时间-就业开放时间）
@sta_api.post("/statistics/stu_find_job_time",summary="统计每个学生的就业时长（offer下发时间-就业开放时间）")
async def stu_find_job_time(db: Session = Depends(get_db)):
    return statistics.crud.statistic_find_job_time(db=db)

# 统计每个班级的平均就业时长（只统计进入就业阶段的学生，也就是有就业开放时间）
@sta_api.post("/statistics/stu_avgtime_find_job",summary="统计每个班级的平均就业时长（只统计进入就业阶段的学生，也就是有就业开放时间）")
async def stu_avgtime_find_job(db: Session = Depends(get_db)):
    return statistics.crud.class_avg_job_time(db=db)